package com.ls.fw.data.enums;

import java.sql.Time;
import java.sql.Timestamp;
import java.util.Date;

import com.ls.fw.data.exception.DataException;


/**
 * 字段类型
 * @author ls
 * 2014年11月25日上午10:06:29
 */
public enum FieldType {
	/**
	 * 不分词
	 */
	varchar("varchar",String.class,"_s"),
	
	/**
	 * 不分词
	 */
	string("string",String.class,"_s"),
	
	/**
	 * 分词
	 */
	text("string",String.class,"_s",true,AnalyzerType.cn),
	
	/**
	 * 浮点型（不分词）
	 */
	number("number",Number.class,"_d"),
	/**
	 * 整形（不分词）
	 */
	longx("long",Long.class,"_l"),
	/**
	 * 浮点型（不分词）
	 */
	doublex("double",Double.class,"_d"),
	
	/**
	 * （不分词）
	 */
	ip("ip",String.class,"_s"),
	
	/**
	 * （不分词）
	 */
	date("date",Date.class,"_dt"),/**
	 * （不分词）
	 */
	time("time",Time.class,"_dt"),/**
	 * （不分词）
	 */
	timestamp("timestamp",Timestamp.class,"_dt"),
	
	/**
	 * （不分词）
	 */
	file("string",String.class,"_s"),
	
	/**
	 * （不分词）
	 */
	booleanx("boolean",Boolean.class,"_b")
	
	/**
	 * （不分词）
	 */
	,floatx("float",Float.class,"_f")
	
	/**
	 * （不分词）
	 */
	,integer("integer",Integer.class,"_i")
	
	/**
	 * （不分词）
	 */
	,shortx("short",Short.class,"_i")
	
	/**
	 * （不分词）
	 */
	,bytex("byte",Byte.class,"_i")
	
	/**
	 * （不分词）
	 */
	,binary("binary",Byte[].class,"_b")
	
	/**
	 * 默认类型
	 */
	,defaultx("",Object.class,"",AnalyzerType.none)
	;	
	private String name = "";
	private String alias = "";
	private boolean token = false;
	private Class<?> type = null;
	
	
	/**
	 * 分词器
	 */
	private AnalyzerType analyzerType = AnalyzerType.none;
	
	
	private FieldType(String name,Class<?> type){
		this.name = name;
		this.type = type;
	}
	
	private FieldType(String name,Class<?> type,String alias){
		this.name = name;
		this.alias = alias;
		this.type = type;
	}
	
	private FieldType(String name,Class<?> type, String alias, AnalyzerType analyzerType) {
		this.name = name;
		this.alias = alias;
		this.analyzerType = analyzerType;
		this.type = type;
	}

	private FieldType(String name, Class<?> type,String alias, boolean token,
			AnalyzerType analyzerType) {
		this.name = name;
		this.alias = alias;
		this.token = token;
		this.analyzerType = analyzerType;
		this.type = type;
	}

	public static FieldType get(String name){
		FieldType[] tfs = FieldType.values();
		for (FieldType fieldType : tfs) {
			if(fieldType.getName().equalsIgnoreCase(name)){
				return fieldType;
			}
		}
		throw new DataException("不支持该类型"+name+"的字段类型！");
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getName() {
		return name;
	}

	public void setAlias(String alias) {
		this.alias = alias;
	}

	public String getAlias() {
		return alias;
	}

	/**
	 * 分词类型
	 * @author ls
	 * 2014年12月3日下午5:46:40 
	 * @return
	 */
	public AnalyzerType getAnalyzerType() {
		return analyzerType;
	}

	public boolean isToken() {
		return token;
	}

	public Class<?> getType() {
		return type;
	}

}
